<?php
declare (strict_types = 1);

namespace app\ldblf_forum\controller;

use app\BaseController;
use think\facade\Config;
use think\facade\Env;
use think\Request;
use think\facade\Route;
use think\facade\AccessSession;
use think\facade\Cookie;
use think\facade\Session;
use think\facade\Db;

class TestLab extends BaseController
{
    /* 
    * Mes的模型
    */
    public function accessViaM()
    {
        // 了解App类
        // dump(app());dump (app('db'));dump(app('mes'));

        // 查询数据
        // find查询主键为1的数据，返回Mes对象，只有一条记录
        // $m = app('mes')->find(1);
        // dump($m -> m_id);
        // dump($m -> m_title);
        // dump($m -> m_createat);
        // dump($m -> m_unick);
        // dump($m -> m_content);
        // dump($m -> m_sid);
        // dump($m -> toArray());

        // 更新
        // $m -> m_unick = 'lilongfeng';
        // $m -> save();

        // 写入
        // $m = app('mes');
        // $m -> m_unick = 'lilongfeng';
        // $m -> m_title = '脚本写入的内容是';
        // $m -> m_content = '脚本写入的句子是';
        // $m -> m_sid = 5;
        // $m -> save();

        // select代表查询主键为1的数据，返回的是数据记录集对象，里面包含了Mes对象；可以查询的多条记录
        // $m = app('mes')->select(1);
        // dump($m);

        // 删除
        // $m = app('mes') -> find(5);
        // $m -> delete();

        // 在Test控制器中定义方法，定义路由，利用模型访问数据库
        dump($this->app->mes->find(1)->toArray());
        dump(app('mes')->find(1));
        $mes = app('mes')->where('m_id',1)->update(['m_unick' => 'lilongfeng']);
    }
    /* 
    * Section的模型
    */
    public function showSec()
    {
        // 在Test控制器中定义方法，定义路由，利用模型访问数据库
        dump($this->app->section->find(1)->toArray());
        dump(app('section')->find(1));
        $section = app('section')->where('s_id',1)->update(['s_name' => '一个超级大BUG!']);
    }
    /* 
    * 参数绑定
    */
    public function bindVar(int $sid =0)
    {
        // 未实施参数绑定，当参数不存在，访问仍然可行
        dump(input('sid'));
        // 实施了参数绑定，那么参数不可以省略，否则访问被拒绝（方法参数错误：sid）
        dump($sid);
        // 为参数设置默认值，可以允许在没有参数的情况下，正常访问该方法
        // 类型声明，可以帮助筛选不符合要求的参数访问情况
    }
    /* 
    *模板标签的使用 
    */
    public function showValue()
    {
        // 输出所有的请求变量
        dump($this -> request ->param());
        dump($this -> request ->param('name'));
        dump(input('param.'));
        dump(input('param.name'));
        $mes = '这是方法定义的变量';
        dump($mes);
        // 渲染+模板赋值
        return view('',['var' => $mes]);
    }
    /**
     * 设置和访问cookie
     */
    public function accessCookie()
    {
        Cookie::set('name','zhangsan',24*60*60);
        dump(Cookie::get('name'));
        Cookie::delete('name');
    }
    /**
     * 查询数据的方法比较
     */
    public function showSelect()
    {
        // find查询，必须要有where条件
        // $re = Db::name('user') -> where('u_nick','lidingbang') -> find();
        // $re = Db::name('user') -> where('u_pa',md5('123456')) -> find();
        // select查询，
        // $re = Db::name('user') -> where('u_pa',md5('123456')) -> select();
        // $re = Db::name('user') -> select();
        // 值查询:value,只能查到一条记录的一个字段的值
        // 相当于 find查询+field（'u_nick'）,可以不需要where条件
        // $re = Db::name('user') -> value('u_nick');
        // 列查询:查询结果是数组，查询所有的记录，多个字段，功能更加强大
        // 相当于 select+filed
        // $re = Db::name('user') -> column('u_nick,u_pa');
        //游标查询:查询海量数据[即处理大量数据],大幅减少内存消耗
        $re = Db::name('user') -> cursor();
        dump($re);
    }
    /**
     * 获取并打印环境变量的值
     *
     */

    public function getEnv()
    {
        //使用类Env获取环境变量的值
        // $debug = Env::get('app.default_timezone',false);
        $debug = env('app.default_timezone',false);

        dump($debug);
        $conf = Config::get('view');
        dump($conf);
        $userName = Config::get('database.connections.forum.username');
        dump($userName);
    }

    /**
     * 获取并打印配置参数的值
     *
     */
    public function getConfig()
    {
        // 批量配置，优先级最高
        Config::set(['auto_rule' => 3],'view');
        // 获取配置参数的值
        $conf = Config::get('view.auto_rule');
        dump($conf);
        // 获取完整的数据库配置方案
        $wholeDb = Config::get('database');
        dump($wholeDb);
        $userName = Config::get('database.connections.forum.username');
        dump($userName);
        echo('前台的默认数据库的连接方案是：');
        echo \think\facade\Config::get('database.default');
        echo '<br>';
        echo('默认使用的数据库用户是：');
        echo \think\facade\Config::get('database.connections.forum.username');
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //
    }

    /**
     * URL生成
     *
     *
     */
    public function createUrl()
    {
        //生成去向User控制器的方法doLogIn的URL
        // echo Route::buildUrl('user/dologin');
        // 域名生成
        // echo Route::buildUrl('user/dologin')->domain(true);
        // 添加后缀
        // echo Route::buildUrl('user/dologin')->domain(true)->suffix('xml');
        // 添加URL参数,可以修改route.php里面的配置项url_common_param,修改为false，可以生成pathinfo的标准的url
        // echo Route::buildUrl('user/dologin',['id' => 1987,'x' => 'lidingbang']) -> domain(true) -> suffix('xml');
        // 助手函数
        echo Url('user/dologin',['id' => 1987,'x' => 'lidingbang']) -> domain(true) -> suffix('xml');
    }

    /**
     * 会话操作
     *
     */
    public function AccessSession()
    {
        //赋值
        Session::set('name','李定邦');
        Session::set('pa','123456');
        echo Session::get('name');
        dump(Session::has('name'));
        // 防范匿名登录
        if (!Session::has('name')){
            #未登录
            echo '未登录';
        }
        // 删除变量，如果只有一个变量，同时删除文件
        // Session::delete('name');
        // 删除并取值
        // Session::pull('name');
        // clear直接清除文件
        Session::clear();
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}
